#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>



//重定向操作
int main(int argc,char *argv[])
{
    if(argc!=2) return 1;
    int fd=open(argv[1],O_CREAT | O_WRONLY |O_TRUNC,0666);
    if(fd<0)
    {
        perror("open");
        return 2;
    }

    dup2(fd,1);
    printf("hello linux!\n");
    printf("hello linux!\n");
    printf("hello linux!\n");
    close(fd);
    return 0;
}




//查看文件描述符
//int main()
//{
//    //close(0);close(2);
//    //printf("%d\n",stdout->_fileno);
//    int fd1=open("log1.txt",O_CREAT|O_WRONLY|O_TRUNC,0664);
//    int fd2=open("log2.txt",O_CREAT|O_WRONLY|O_TRUNC,0664);
//    int fd3=open("log3.txt",O_CREAT|O_WRONLY|O_TRUNC,0664);
//    int fd4=open("log4.txt",O_CREAT|O_WRONLY|O_TRUNC,0664);
//    if(fd1<0)
//    {
//        perror("open");
//        return 1;
//    }
//    if(fd2<0)
//    {
//        perror("open");
//        return 1;
//    }
//    if(fd3<0)
//    {
//        perror("open");
//        return 1;
//    }
//    if(fd4<0)
//    {
//        perror("open");
//        return 1;
//    }
//    printf("fd1->%d\n",fd1);
//    printf("fd2->%d\n",fd2);
//    printf("fd3->%d\n",fd3);
//    printf("fd3->%d\n",fd4);
//    close(fd1);
//    close(fd2);
//    close(fd3);
//    close(fd4);
//    return 0;
//}



//FILE的理解
//int main()
//{
//    printf("stdin_fd:%d\n",stdin->_fileno);
//    printf("stdout_fd:%d\n",stdout->_fileno);
//    printf("stderr_fd:%d\n",stderr->_fileno);
//    return 0;
//}



//文本写入和二进制写入
//int main()
//{
//    umask(0);
//    int fd=open("log.txt",O_CREAT|O_WRONLY|O_TRUNC,0666);
//    if(fd<0)
//    {
//        perror("open");
//        return 1;
//    }
//    int a=1234567;
//    //write(fd,&a,sizeof a);
//    char buffer[20];
//    snprintf(buffer,sizeof buffer,"%d\n",a);
//    write(fd,buffer,strlen(buffer));
//    close(fd);
//}



//使用系统调用读文件
//int main()
//{
//    int fd=open("log.txt",O_RDONLY);
//    if(fd<0)
//    {
//        perror("open");
//        return 1;
//    }
//    while(1)
//    {
//        char buffer[128];
//        int r=read(fd,buffer,sizeof(buffer)-1);
//        if(r>0)
//        {
//            printf("%s",buffer);
//        }
//        else if(r==0)
//            break;
//    }
//    close(fd);
//    return 0;
//}



//使用系统调用写文件
//int main()
//{
//    umask(0);
//    int fd=open("log.txt",O_CREAT|O_WRONLY|O_TRUNC,0664);
//    if(fd<0)
//    {
//        perror("open");
//        return 1;
//    }
//    const char *msg="hello world\n";
//    int cnt=5;
//    while(cnt--)
//    {
//        write(fd,msg,strlen(msg));
//    }
//    
//    close(fd);
//    return 0;
//}
